package com.example.guava.ratelimiter.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 限流注解
 * @author zhouxuan
 * @Target() 注解的修饰范围
 * @RetentionPolicy() 注解的生命周期
 * @Documented 标记注解
 * @date 2020/5/15 17:06
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface XlRateLimiter {

    /**
     * 每秒向桶中放入的令牌数量,默认最大不限流
     * @return
     */
    double perSecond() default 10000;

    /**
     * 获取令牌的等待时间
     * @return
     */
    int timeOut() default 0;

    /**
     * 超时时间单位 默认为毫秒
     * @return
     */
    TimeUnit timeOutUnit() default TimeUnit.MILLISECONDS;

    /**
     * key
     * @return
     */
    String key();
}
